package com.test38_集合;

import org.junit.Test;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 * Map集合
 */
public class Demo04_Map {

    @Test
    public void test1() {
        {
            Map<Integer, String> map = new HashMap<>();
            map.put(1, "one");
            map.put(2, "two");
            map.put(3, "three");
            System.out.println(map);
        }
        {
            // JDK1.9支持
            Map<Integer, String> map = Map.of(1, "one", 2, "two", 3, "three");
            System.out.println(map);
        }
    }

    /**
     * HashMap，无序存储
     */
    @Test
    public void test2() {
        Map<Integer, String> map = new HashMap<>();
        map.put(null, "空空如也");  // key为空
        System.out.println("【未发生替换】" + map.put(1, "edu.yootk.com"));
        System.out.println("【已发生替换】" + map.put(1, "www.yootk.com"));
        System.out.println("【未发生替换】" + map.put(2, "yootk.ke.qq.com"));
        map.put(0, null);   // value为空
        System.out.println(map);
    }

    @Test
    public void test3() {
        Map<Integer, String> map = new HashMap<>();
        map.put(null, "空空如也");
        map.put(1, "edu.yootk.com");
        map.put(2, "yootk.ke.qq.com");
        map.put(3, "www.yootk.com");
        map.put(0, null);
        System.out.println("【key不存在】" + map.get(9));
        System.out.println("【key存在】" + map.get(3));
        System.out.println("【null-key查询】" + map.get(null));
    }

    /**
     * LinkedHashMap，按保存顺序存储
     */
    @Test
    public void test4() {
        Map<Integer, String> map = new LinkedHashMap<>();
        map.put(null, "空空如也");
        map.put(99, "edu.yootk.com");
        map.put(22, "yootk.ke.qq.com");
        map.put(33, "www.yootk.com");
        map.put(0, null);
        System.out.println(map);
    }

    /**
     * TreeMap，按key排序存储
     */
    @Test
    public void test5() {
        Map<Integer, String> map = new TreeMap<>();
        // key不能为空
        // map.put(null, "空空如也");
        map.put(99, "edu.yootk.com");
        map.put(22, "yootk.ke.qq.com");
        map.put(33, "www.yootk.com");
        map.put(0, null);
        System.out.println(map);
    }

    /**
     * HashMap与Hashtable的区别：
     * 1.HashMap是在JDK1.2的时候提供的工具类，而Hashtable是在JDK1.0的时候提供的工具类；
     * 2.HashMap的key和value可以保存空，而Hashtable不能保存空；
     * 3.HashMap的初始容量为16，而Hashtable的初始容量为11；
     * 4.HashMap采用的是异步处理，属于非线程安全的集合类，
     * Hashtable采用的是同步处理，属于线程安全的集合类。
     */
    @Test
    public void test6() {
        Map<Integer, String> map = new Hashtable();
        // key不能为空
        // map.put(null, "空空如也");
        map.put(99, "edu.yootk.com");
        map.put(22, "yootk.ke.qq.com");
        map.put(33, "www.yootk.com");
        // value不能为空
        // map.put(0, null);
        System.out.println(map);
    }
}
